package com.rp.system.service;


import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.rp.common.utils.RpUtil;
import com.rp.log.annotation.RpLog;
import com.rp.system.dao.MenuDao;
import com.rp.system.dao.MenuItemDao;
import com.rp.system.po.Menu;
import com.rp.system.po.MenuItem;

@Service
@Transactional
public class MenuService {
	
	@Autowired
	private MenuDao menuDao;
	@Autowired
	private MenuItemDao menuItemDao;
	
	
	/**************************菜单相关
	 * @throws Exception *************************/
	@RpLog(desc="新增菜单")
	public void saveMenu(Menu menu) throws Exception{
		if(checkMenuNameExist(menu.getName())){
			throw new Exception("数据库中已存在名称为"+menu.getName()+"的菜单");
		}
		if(menu.getId() == null){
			menu.setId(RpUtil.createUuid());
		}
		menu.setUrl(menu.getUrl()+menu.getName());//设置URL
		menu.setCreateDate(RpUtil.getCurrentDatetime());
		String newId = (String) menuDao.save(menu);
		
		MenuItem mi = new MenuItem();
		mi.setId(RpUtil.createUuid());
		mi.setText("初始节点");
		mi.setMenuId(newId);
		mi.setCreateDate(RpUtil.getCurrentDatetime());
		menuItemDao.save(mi);
	}
	
	@RpLog(desc="更新菜单")
	public void updateMenu(Menu menu){
		List<MenuItem> mis = menuItemDao.find("from MenuItem where menuId = ?", menu.getId());
		for (MenuItem mi : mis) {
			mi.setMenuName(menu.getName());
			menuItemDao.update(mi);
		}
		menu.setUpdateDate(RpUtil.getCurrentDatetime());
		menuDao.update(menu);
	}
	
	@RpLog(desc="删除菜单")
	public void deleteMenu(String menuId){
		List<MenuItem> mis = menuItemDao.getMenuItemsByMenuId(menuId);
		for (MenuItem menuItem : mis) {
			menuItemDao.delete(menuItem);
		}
		menuDao.delete(menuId);
	}
	
	/**
	 * 检察菜单名称是否存在
	 * @param menuName
	 * @return
	 */
	public boolean checkMenuNameExist(String menuName){
		List<Menu> menus = menuDao.find("from Menu where name = ?", menuName);
		if(menus.size() > 0){
			return true;
		}
		return false;
	}
	
	/**************************菜单项相关*************************/
	
	/**
	 * 新增菜单项，主键由程序生成
	 * @param mi
	 * @param menuId
	 * @return
	 */
	@RpLog(desc="新增菜单项")
	public String saveMenuItem(MenuItem mi, String menuId, String menuName){
		if(mi.getId() == null){
			mi.setId(RpUtil.createUuid());
		}
		mi.setMenuId(menuId);
		mi.setMenuName(menuName);
		mi.setCreateDate(RpUtil.getCurrentDatetime());
		return (String) menuItemDao.save(mi);
	}
	
	@RpLog(desc="更新菜单项")
	public void updateMenuItem(MenuItem mi){
		mi.setUpdateDate(RpUtil.getCurrentDatetime());
		menuItemDao.update(mi);
	}
	
	/*@RpLog(desc="更新菜单项")
	public void updateMenuItem(MenuItem mi, String menuId){
		if(mi.getId() == null){
			mi.setId(RpUtil.createUuid());
			mi.setCreateDate(RpUtil.getCurrentDatetime());
			mi.setMenuId(menuId);
			menuItemDao.save(mi);
		}else{
			mi.setUpdateDate(RpUtil.getCurrentDatetime());
			menuItemDao.saveOrUpdate(mi);
		}
	}*/
	
	@RpLog(desc="删除菜单项")
	public void deleteMenuItem(String menuItemId){
		menuItemDao.delete(menuItemId);
	}
	
	/**
	 * 检察菜单项名称是否存在
	 * @param menuName
	 * @return
	 */
	public boolean checkMenuItemTextExist(String menuItemText){
		List<MenuItem> mis = menuItemDao.find("from MenuItem where text = ?", menuItemText);
		if(mis.size() > 0){
			return true;
		}
		return false;
	}
	
	
	public MenuDao getMenuDao() {
		return menuDao;
	}
	
	public MenuItemDao getMenuItemDao() {
		return menuItemDao;
	}
}
